"想傳訊息給我嗎?想要的話就去傳吧!我把公鑰都放在那裡了。"
---
我們先前講了串流密碼、區塊密碼,
介紹了OTP、RC4、DES、AES,
這些都屬於對稱式加密,加密和解密使用的是同一把密鑰。
而既然使用同一把密鑰,Alice 和 Bob 就都要擁有這把密鑰,
他們必須經由安全的通道傳送這把密鑰。
另一件事情是,如果 Alice 要和 Carol 通訊的話,他們兩個就要有新的一把密鑰。
也就是說,如果 Alice 要和 1000 個人通訊,他就必須儲存 1000 把密鑰,很不方便。
於是我們有了公鑰密碼學(public-key cryptography)
我們想要每個人只需要掌管一把密鑰就好,我們稱這把密鑰為私鑰(private key)。
而私鑰可以生成公鑰(public key)。
將公鑰公開,私鑰藏好。
當 Alice 想要傳送訊息給 Bob 的時候,她可以找到 Bob 公開的公鑰,
用這把公鑰進行訊息的加密,
加密完的訊息可以經過公開的通道傳送。
收到訊息的 Bob 可以用私鑰將訊息解密得到明文。
反之亦然。
所以好處就產生了,
Alice 和 Bob 分別只要擁有一把私鑰就行了,
就算他們要跟10000個人進行通訊,他也只需要保管一把私鑰。
公鑰加密的好處之二:數位簽章(digital signature)
現實生活中我們想要確認一份契約是否為某人所認定,我們會看他的簽名。
這個契約要有效立,我們就得確認這個簽章為本人所做。
所以我們需要簽章有以下的性質:只有本人做得出來,而不可否認所為。
既然私鑰是只有本人才有的東西,那麼他就是一個可以拿來作簽章的東西。
而且較現實世界好的部分是,私鑰無法偽造。
所以你要簽署一份文件時,就可以用私鑰加密這份文件,
而大家可以使用你的公鑰解密,
進而確認是你本人所發布。(而且還不用擔心簽名太醜)
公鑰密碼學的概念非常重要,在區塊鏈上尤其重要,
他用在於數位錢包的使用。
我們先不管區塊鏈是什麼,怎麼運作的。
我們只需要知道你在網路上面有一個錢包,這個錢包可以拿來收款、支付。
別人可以存錢進來,你可以用裡面的錢做支付。
不像現實生活中你有一個實體的錢包,錢就放在裡面,是你的就是你的,地上撿到的也是你的。
數位錢包,就是網路上的一筆資料,告訴你這個錢包裡面有多少錢。
你怎麼證明這個錢包是你的?
私鑰。
因為只有你擁有私鑰,所以如果你擁有這個錢包的私鑰,你就有裡面所有的錢。
私鑰有點像數位錢包的實體,他讓電子世界裡的東西跟實體世界連結在一起。
也就是說,如果你今天在地上撿到一串私鑰,那你等同於撿到一個錢包。
所以實際上有了私鑰之後要怎麼證明你擁有私鑰?
因為私鑰是不能跟別人說的。
我們剛說私鑰除了可以用來解密,還可以用來簽章。
當你要進行一份交易時,你只要用私鑰對這份交易簽章就可以了。
有簽章就需要驗章,驗章需要公鑰。
所以你手上的這把私鑰,要經過橢圓曲線的運算之後得到一把公鑰,這把公鑰可以用來驗章。
(橢圓曲線會在日後介紹)
而公鑰除了驗章,最重要的目的是產生地址,
地址就像銀行帳號一樣,可以讓人匯錢給你,所以可以公開。
像這樣:
0xC064a24Ec8ab00Bd67924d007b94FD8EebD4Bc25
有了地址之後你就可以匯錢給我了。(開玩笑的)
以上稍微介紹了一下公鑰密碼學以及他在區塊鏈上如何被使用,
接下來幾天會介紹常見的公鑰加密演算法,
區塊鏈的部分涉及 Hash ,所以會在更後面再了解。
圖片來源:
https://www.digicert.com/faq/ssl-cryptography.htm